import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Observable;

public class Parution extends Observable implements Serializable {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private Integer _num;	
	private Periodique _periodique;
	
	// Attributs d'Association
	private HashMap<Integer, Article> _articles;
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur. 
	 * @param issn			numero ISSN du periodique
	 * @param nom			nom du periodique	 
	 */
	public Parution(Integer num, Periodique periodique) {		
		this.setNum(num);	
		this.setPeriodique(periodique);
		this.setArticles(new HashMap<Integer, Article>());
		
	} // Fin Constructeur

	// ************************************************************************************************************
	// Méthodes privées
	// ************************************************************************************************************
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs	
	
	/**
	 * setter de l'attribut num d'ISSN.
	 * @param isbn valeur à affecter à l'ISBN de l'ouvrage
	 */
	public void setNum(Integer num) {
		this._num = num;
	}	
	
	public void setArticles(HashMap<Integer, Article> articles){
		_articles = articles;
	}
	
	public void setPeriodique(Periodique periodique){
		_periodique = periodique;
	}
	
	public void setArticle(int numero, Article article){
		_articles.put(numero, article);
	}
	
	public void notifierObservateurs() {
		this.setChanged();
		this.notifyObservers();	
	}
	
	
	// ************************************************************************************************************
	// Traitements
	// ************************************************************************************************************
	
	
	public Article ajouterArticle(String pageDebut,String titre,Auteur [] auteur){
		//creer un numero
		int numero = generateurNum();
		//creer un nouveau article
		Article article = new Article(numero,titre,pageDebut,this,auteur);
		//lier l'article a la parution
		this.setArticle(numero, article);
		//notif ses observateurs du changement
		this.notifierObservateurs();
		return article;
	}
	
	private int generateurNum(){
		//generation du numero
		return getNbArticles()+1;
	}
		
	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
	/**
	 * Getter de l'ISBN.
	 * @return ISBN de l'ouvrage
	 */
	public Integer getNum() {
		return _num;
	}
	
	public Periodique getPeriodique(){
		return _periodique;
	}
	
	public HashMap<Integer,Article> getEnsArticle(){
		return _articles;
	}
	
	public Article getArticle(int numero) {
		return (Article) _articles.get(numero);
	} // Fin unArticle

	
	public Collection<Article> getArticles() {
		return _articles.values();
	}

	
	public int getNbArticles() {
		return _articles.size();
	}	
	
} // Fin Classe Ouvrage

